home *** CD-ROM | disk | FTP | other *** search
- multipass
- mc68020
-
- bra.w initc2p ; offset 0: initialization routines
- bra.w doc2p_1X8 ; offset 4: one pixel wide version, AGA
- bra.w doc2p_1X6 ; offset 8: one pixel wide version, EHB
- bra.w doc2p_2X8 ; offset 12: two pixel wide version, AGA
- bra.w doc2p_2X6 ; offset 16: two pixel wide version, EHB
- dc.l string ; offset 20: address of descr string
-
- gfxbase dc.l 0 ; GfxBase
- c2p_ptr dc.l 0 ; hardware address of Akiko register
-
- dc.b '$VER: akiko_1 1.0 (4/1/96)',0
- string dc.b 'A chunky to planar routine by Peter McGavin. '
- dc.b 'REQUIRES AKIKO CHIP, e.g, as in CD32. '
- dc.b 'Supports 6/8 bitplane, single/double width pixels.',0
- gfxname dc.b 'graphics.library',0
- even
-
- gb_ChunkyToPlanarPtr equ 508
-
- initc2p
-
- ; create 2 tables for Gloom
-
- ; a0=columns buffer to fill in (array of longs) for 1 wide pixs.
- ; a1=columns buffer for 2 wide pixs
- ; d0=how many columns (multiple of 32)
- ; a2=palette remapping array (do 256)
-
- move.w #255,d1 ;#colours-1
- .loop move.b d1,(0,a2,d1.w)
- dbf d1,.loop
-
- ; column offsets for 1 wide pixels
-
- ; 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
- ; 16,17,18,19,20...
-
- move.w d0,d1
- ext.l d1
- subq.l #1,d1
- .loop2 move.l d1,(0,a0,d1.w*4)
- dbf d1,.loop2
-
- ; column offsets for 2 wide pixels
-
- ; 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
- ; 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
- ; 32,34,36,38,40,...
-
- lsr.w #5,d0
- subq.w #1,d0
- moveq #0,d1
- .loop3 moveq #15,d2
- .loop4 move.l d1,(a1)+
- addq.l #2,d1
- dbf d2,.loop4
- sub.l #31,d1
- moveq #15,d2
- .loop5 move.l d1,(a1)+
- addq.l #2,d1
- dbf d2,.loop5
- subq.l #1,d1
- dbf d0,.loop3
-
- ; open graphics.library and retrieve gb_ChunkyToPlanarPtr
-
- lea (gfxname,pc),a1
- moveq #40,d0
- move.l (4).w,a6
- jsr (_LVOOpenLibrary,a6)
- lea (gfxbase,pc),a0
- move.l d0,(a0) ; save gfxbase
- beq .end
- movea.l d0,a1 ; a1 = gfxbase
- move.l (gb_ChunkyToPlanarPtr,a1),(c2p_ptr-gfxbase,a0)
- jsr (_LVOCloseLibrary,a6)
- .end
- rts
-
- doc2p_1X8
- ; inputs:
- ; a0.l=src chunky buffer
- ; a1.l=dest chipmem bitmap
- ; d0.w=width (in pixels - multiple of 32) to convert
- ; d1.w=height (in pixels - even)
- ; d2.l=modulo from one bitplane to next (copmod-ish)
- ; d3.l=modulo from start of one line to start of next (linemod)
-
- ; internal:
- ; a2=subtract at end of one loop
- ; a3=akiko hardware register ptr
- ; a5=bitplane modulo, 1 bp to next
- ; d3=add at end of line
- ; d5=counter
-
- move.l (c2p_ptr,pc),d4
- beq .return
- movea.l d4,a3 ; a3 -> akiko hardware register
-
- movea.l d2,a5 ; a5 = bpmod
-
- lsl.l #3,d2 ; 8 bitplanes
- movea.l d2,a2 ; 8 * bpmod
- suba.l a5,a2 ; 7 * bpmod
- subq.l #4,a2 ; a2 = 7 * bpmod - 4
-
- lsr.w #5,d0 ; num 32 pixels per row
- move.w d0,d2
- lsl.w #2,d2 ; num 8 pixels per row (dest bytesperrow)
- ext.l d2 ; bytesperrow
- sub.l d2,d3 ; d3 = linemod - bytesperrow
-
- subq.w #1,d1 ; d1 = height - 1
- subq.w #1,d0 ; d0 = num 32 pixels per row - 1
-
- ;;; movea.l (gfxbase,pc),a6 ; gfx lib must be open
- ;;; movem.l d0/d1/a0/a1,-(sp) ; but when can I close gfx lib?
- ;;; jsr (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
- ;;; movem.l (sp)+,d0/d1/a0/a1
-
- .rowloop move.w d0,d5 ; num 32 pixels per row - 1
-
- .innerloop move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
-
- move.l (a3),(a1) ; plane 0
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 1
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 2
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 3
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 4
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 5
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 6
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 7
- suba.l a2,a1 ; -7*bpmod+4
-
- dbra d5,.innerloop
-
- adda.l d3,a1 ; dest skip
-
- dbra d1,.rowloop ; next row
-
- ;;; jsr (_LVODisownBlitter,a6) ; free Akiko
- .return
- rts
-
-
- doc2p_1X6
- ; inputs:
- ; a0.l=src chunky buffer
- ; a1.l=dest chipmem bitmap
- ; d0.w=width (in pixels - multiple of 32) to convert
- ; d1.w=height (in pixels - even)
- ; d2.l=modulo from one bitplane to next (copmod-ish)
- ; d3.l=modulo from start of one line to start of next (linemod)
-
- ; internal:
- ; a2=subtract at end of one loop
- ; a3=akiko hardware register ptr
- ; a5=bitplane modulo, 1 bp to next
- ; d3=add at end of line
- ; d5=counter
-
- move.l (c2p_ptr,pc),d4
- beq .return
- movea.l d4,a3 ; a3 -> akiko hardware register
-
- movea.l d2,a5 ; a5 = bpmod
-
- lsl.l #2,d2 ; 6 bitplanes
- movea.l d2,a2 ; 4 * bpmod
- adda.l a5,a2 ; 5 * bpmod
- subq.l #4,a2 ; a2 = 5 * bpmod - 4
-
- lsr.w #5,d0 ; num 32 pixels per row
- move.w d0,d2
- lsl.w #2,d2 ; num 8 pixels per row (dest bytesperrow)
- ext.l d2 ; bytesperrow
- sub.l d2,d3 ; d3 = linemod - bytesperrow
-
- subq.w #1,d1 ; d1 = height - 1
- subq.w #1,d0 ; d0 = num 32 pixels per row - 1
-
- ;;; movea.l (gfxbase,pc),a6 ; gfx lib must be open
- ;;; movem.l d0/d1/a0/a1,-(sp) ; but when can I close gfx lib?
- ;;; jsr (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
- ;;; movem.l (sp)+,d0/d1/a0/a1
-
- .rowloop move.w d0,d5 ; num 32 pixels per row - 1
-
- .innerloop move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
-
- move.l (a3),(a1) ; plane 0
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 1
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 2
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 3
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 4
- adda.l a5,a1 ; +bpmod
- move.l (a3),(a1) ; plane 5
- suba.l a2,a1 ; -5*bpmod+4
-
- dbra d5,.innerloop
-
- adda.l d3,a1 ; dest skip
-
- dbra d1,.rowloop ; next row
-
- ;;; jsr (_LVODisownBlitter,a6) ; free Akiko
- .return
- rts
-
-
- doc2p_2X8
- ; inputs:
- ; a0.l=src chunky buffer
- ; a1.l=dest chipmem bitmap
- ; d0.w=width (in pixels - multiple of 32) to convert
- ; d1.w=height (in pixels - even)
- ; d2.l=modulo from one bitplane to next (copmod-ish)
- ; d3.l=modulo from start of one line to start of next (linemod)
-
- ; internal:
- ; a2=subtract at end of one loop
- ; a3=akiko hardware register ptr
- ; a5=bitplane modulo, 1 bp to next
- ; d3=add at end of line
- ; d5=counter
-
- move.l (c2p_ptr,pc),d4
- beq .return
- movea.l d4,a3 ; a3 -> akiko hardware register
-
- movea.l d2,a5 ; a5 = bpmod
-
- lsl.l #3,d2 ; 8 bitplanes
- movea.l d2,a2 ; 8 * bpmod
- suba.l a5,a2 ; 7 * bpmod
- subq.l #4,a2 ; a2 = 7 * bpmod - 4
-
- lsr.w #5,d0 ; num 32 pixels per row
- move.w d0,d2
- lsl.w #3,d2 ; num 4 pixels per row (dest bytesperrow)
- ext.l d2 ; bytesperrow
- sub.l d2,d3 ; d3 = linemod - bytesperrow
-
- subq.l #4,a5 ; a5 = bpmod - 4
-
- move.l #$aaaaaaaa,d7
-
- subq.w #1,d1 ; d1 = height - 1
- subq.w #1,d0 ; d0 = num 32 pixels per row - 1
-
- ;;; movea.l (gfxbase,pc),a6 ; gfx lib must be open
- ;;; movem.l d0/d1/a0/a1,-(sp) ; but when can I close gfx lib?
- ;;; jsr (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
- ;;; movem.l (sp)+,d0/d1/a0/a1
-
- .rowloop move.w d0,d5 ; num 32 pixels per row - 1
-
- .innerloop move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
-
- move.l (a3),d2 ; plane 0 from Akiko
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 0
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 1 from Akiko
- move.l d6,(a1) ; plane 0
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 1
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 2 from Akiko
- move.l d6,(a1) ; plane 1
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 2
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 3 from Akiko
- move.l d6,(a1) ; plane 2
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 3
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 4 from Akiko
- move.l d6,(a1) ; plane 3
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 4
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 5 from Akiko
- move.l d6,(a1) ; plane 4
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 5
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 6 from Akiko
- move.l d6,(a1) ; plane 5
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 6
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 7 from Akiko
- move.l d6,(a1) ; plane 6
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 7
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l d6,(a1) ; plane 7
- suba.l a2,a1 ; -7*bpmod+4
-
- dbra d5,.innerloop
-
- adda.l d3,a1 ; dest skip
-
- dbra d1,.rowloop ; next row
-
- ;;; jsr (_LVODisownBlitter,a6) ; free Akiko
- .return
- rts
-
-
- doc2p_2X6
- ; inputs:
- ; a0.l=src chunky buffer
- ; a1.l=dest chipmem bitmap
- ; d0.w=width (in pixels - multiple of 32) to convert
- ; d1.w=height (in pixels - even)
- ; d2.l=modulo from one bitplane to next (copmod-ish)
- ; d3.l=modulo from start of one line to start of next (linemod)
-
- ; internal:
- ; a2=subtract at end of one loop
- ; a3=akiko hardware register ptr
- ; a5=bitplane modulo, 1 bp to next
- ; d3=add at end of line
- ; d5=counter
-
- move.l (c2p_ptr,pc),d4
- beq .return
- movea.l d4,a3 ; a3 -> akiko hardware register
-
- movea.l d2,a5 ; a5 = bpmod
-
- lsl.l #2,d2 ; 6 bitplanes
- movea.l d2,a2 ; 4 * bpmod
- adda.l a5,a2 ; 5 * bpmod
- subq.l #4,a2 ; a2 = 5 * bpmod - 4
-
- lsr.w #5,d0 ; num 32 pixels per row
- move.w d0,d2
- lsl.w #3,d2 ; num 4 pixels per row (dest bytesperrow)
- ext.l d2 ; bytesperrow
- sub.l d2,d3 ; d3 = linemod - bytesperrow
-
- subq.l #4,a5 ; a5 = bpmod - 4
-
- move.l #$aaaaaaaa,d7
-
- subq.w #1,d1 ; d1 = height - 1
- subq.w #1,d0 ; d0 = num 32 pixels per row - 1
-
- ;;; movea.l (gfxbase,pc),a6 ; gfx lib must be open
- ;;; movem.l d0/d1/a0/a1,-(sp) ; but when can I close gfx lib?
- ;;; jsr (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
- ;;; movem.l (sp)+,d0/d1/a0/a1
-
- .rowloop move.w d0,d5 ; num 32 pixels per row - 1
-
- .innerloop move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
- move.l (a0)+,(a3) ; next 4 pixels -> Akiko
-
- move.l (a3),d2 ; plane 0 from Akiko
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 0
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 1 from Akiko
- move.l d6,(a1) ; plane 0
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 1
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 2 from Akiko
- move.l d6,(a1) ; plane 1
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 2
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 3 from Akiko
- move.l d6,(a1) ; plane 2
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 3
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 4 from Akiko
- move.l d6,(a1) ; plane 3
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 4
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l (a3),d2 ; plane 5 from Akiko
- move.l d6,(a1) ; plane 4
- adda.l a5,a1
-
- move.l d2,d4
- and.l d7,d2 ; d2 = a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.
- eor.l d2,d4 ; d4 = .q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F
- move.l d2,d6
- lsr.l #1,d6
- or.l d6,d2 ; d2 = aabbccddeeffgghhiijjkkllmmnnoopp
- move.l d2,(a1)+ ; plane 5
- move.l d4,d6
- add.l d6,d6
- or.l d4,d6 ; d6 = qqrrssttuuvvwwxxyyzzAABBCCDDEEFF
- move.l d6,(a1) ; plane 5
- suba.l a2,a1 ; -5*bpmod+4
-
- dbra d5,.innerloop
-
- adda.l d3,a1 ; dest skip
-
- dbra d1,.rowloop ; next row
-
- ;;; jsr (_LVODisownBlitter,a6) ; free Akiko
- .return
- rts
-
- end
-